Actualmente estoy trabajando en un proyecto que recopila información de productos de varias tiendas. Tengo un problema cuando asigno los datos del producto raspado a un objeto que quiero almacenar en una matriz final. Todo va bien excepto cuando un producto no tiene imagen.
let productData = { productId: item.id, title: item.title, price: item.price.now, unitSize: item.price.unitSize, productLink: item.link, productImage: typeof item.images[0].url == "undefined" ? null : item.images[0].url, availableOnline: item.availableOnline } productsArray.push(productData) }Como puede ver, estoy tratando de usar un operador ternario para verificar si el valor no está definido primero. Si el valor no está definido, quiero establecer el valor de productImage en nulo en lugar de que toda la aplicación falle con el error de que no está definido. También intenté almacenar el valor en una variable separada primero y verificar que esa variable no esté definida o no, pero eso tampoco funcionó.
¿Alguien podría explicarme por qué la forma en que lo hago ahora no funciona y qué debo hacer para que funcione?
¿ item.images siempre tiene un elemento de matriz en la posición cero? De lo contrario, está intentando obtener la propiedad url de un objeto indefinido, lo que generará un error.
Puede agregar a esto comprobando primero que item.images[0] :
{ productImage: item.images[0] !== undefined && typeof item.images[0].url == "undefined" ? null : item.images[0].url, }Mejor aún, asumiendo que no necesita compatibilidad con IE, podría usar encadenamiento opcional y fusión nula como lo señaló robertklep en los comentarios.
{ productImage: item.images[0]?.url ?? null, }